package com.sky.service.impl;

import com.sky.controller.user.CommonController;
import com.sky.dto.StroyDTO;
import com.sky.entity.Story;
import com.sky.mapper.StoryMapper;
import com.sky.result.Result;
import com.sky.service.StroyService;
import com.sky.utils.HttpClientUtil;
import com.sky.vo.StoryVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@Service
public class StroyServiceImpl implements StroyService {


    @Autowired
    private CommonController commonController;
    @Autowired
    private StoryMapper storyMapper;



    /**
     * 生成故事接口
     * @param storyDTO
     * @return
     */
    public StoryVo getStroy(StroyDTO storyDTO) {

        String text=storyDTO.getStoryTopic();
        String url = "http://localhost:9880/";

        Map<String, Object> body = new HashMap<>();
        body.put("refer_wav_path", "cankao/私あまり上手じゃないから満足してもらえるかわからないけど.wav");
        body.put("prompt_text", "私あまり上手じゃないから満足してもらえるかわからないけど");
        body.put("prompt_language", "all_ja");
        body.put("text", text);
        body.put("text_language", "all_zh");

// 其他可选参数（如果你想加）
//        body.put("top_k", 15);
//        body.put("top_p", 0.8);
//        body.put("temperature", 1.0);
//        body.put("speed", 1.0);
//        body.put("sample_steps", 32);
//        body.put("if_sr", false);

        try {
            byte[] audioData = HttpClientUtil.doPost4Audio(url, body);

            // 1. 保存文件
            Path outputPath = Paths.get("output.wav");
            Files.write(outputPath, audioData);
            log.info("当前保存路径为: {}", outputPath.toAbsolutePath());

            // 2. 封装成 MultipartFile
            MockMultipartFile multipartFile = new MockMultipartFile(
                    "file",                         // 表单字段名
                    "output.wav",                   // 文件名
                    "audio/wav",                    // MIME 类型
                    Files.newInputStream(outputPath) // 文件输入流
            );

            // 3. 调用上传接口
            Result<String> uploadResult = commonController.upload(multipartFile);

            if (uploadResult.getCode() != 1) {
                log.error("上传失败：{}", uploadResult.getMsg());
                return null;
            }

            // 4. 返回上传后的 OSS 链接
            String ossUrl = uploadResult.getData();
            log.info("上传成功，文件链接为：{}", ossUrl);
            return null;

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 根据当前用户查询故事
     * @param userId
     * @return
     */
    public List<Story> getByUserId(Long userId) {
        List<Story> list=storyMapper.getByUserId(userId);
        return list;
    }

    /**
     * 根据id删除故事
     * @param id
     */
    public void delete(Long id) {
        storyMapper.deleteById(id);
    }
}
